package com.edu.exam.enums.questionbank;

import com.edu.exam.enums.core.BaseEnum;

/**
 * 属性类型枚举
 *
 * 管理试题验证规则适用的属性类型，包括分类属性、标签属性、难度属性、内容属性、分数属性、时间属性、类型属性等
 *
 * @author System
 * @version 1.0.0
 */
public enum AttributeType implements BaseEnum {

    /**
     * 分类属性
     */
    CATEGORY("CATEGORY", "分类属性"),

    /**
     * 标签属性
     */
    TAG("TAG", "标签属性"),

    /**
     * 难度属性
     */
    DIFFICULTY("DIFFICULTY", "难度属性"),

    /**
     * 内容属性
     */
    CONTENT("CONTENT", "内容属性"),

    /**
     * 分数属性
     */
    SCORE("SCORE", "分数属性"),

    /**
     * 时间属性
     */
    TIME("TIME", "时间属性"),

    /**
     * 类型属性
     */
    TYPE("TYPE", "类型属性");

    private final String code;
    private final String description;

    AttributeType(String code, String description) {
        this.code = code;
        this.description = description;
    }

    @Override
    public String getCode() {
        return code;
    }

    @Override
    public String getDescription() {
        return description;
    }

    /**
     * 获取枚举的JSON值（使用code）
     *
     * @return 枚举代码
     */
    public String getJsonValue() {
        return code;
    }

    /**
     * 从代码创建枚举实例
     *
     * @param code 枚举代码
     * @return 对应的枚举实例，如果代码无效则返回CONTENT
     */
    public static AttributeType fromCode(String code) {
        if (code == null || code.trim().isEmpty()) {
            return CONTENT;
        }

        for (AttributeType type : values()) {
            if (type.getCode().equals(code)) {
                return type;
            }
        }
        return CONTENT;
    }

    /**
     * 从描述创建枚举实例
     *
     * @param description 枚举描述
     * @return 对应的枚举实例，如果描述无效则返回CONTENT
     */
    public static AttributeType fromDescription(String description) {
        if (description == null || description.trim().isEmpty()) {
            return CONTENT;
        }

        for (AttributeType type : values()) {
            if (type.getDescription().equals(description)) {
                return type;
            }
        }
        return CONTENT;
    }

    @Override
    public String toString() {
        return description;
    }
}